<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('insurance_plans', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 方案基本信息
            $table->string('code', 50)->unique(); // 方案编码
            $table->string('name', 100); // 方案名称
            $table->text('description')->nullable();

            // 方案类型
            $table->string('plan_type', 50); // basic, premium, executive, etc.
            $table->string('target_group', 50)->nullable(); // all_staff, management, technical, etc.

            // 包含的保险类型
            $table->json('insurance_types'); // 包含的保险类型ID数组

            // 缴费配置
            $table->decimal('total_employee_rate', 5, 4)->default(0); // 个人总缴费比例
            $table->decimal('total_company_rate', 5, 4)->default(0); // 单位总缴费比例
            $table->decimal('estimated_monthly_cost', 10, 2)->nullable(); // 预估月度成本

            // 适用条件
            $table->unsignedBigInteger('department_id')->nullable(); // 指定部门
            $table->string('department_name', 100)->nullable();
            $table->unsignedBigInteger('position_id')->nullable(); // 指定岗位
            $table->string('position_name', 100)->nullable();
            $table->integer('min_service_years')->default(0); // 最低服务年限
            $table->integer('max_age')->nullable(); // 最高年龄限制

            // 方案详情
            $table->json('coverage_breakdown')->nullable(); // 各险种保障明细
            $table->json('contribution_breakdown')->nullable(); // 各险种缴费明细
            $table->text('benefits_summary')->nullable(); // 福利总结
            $table->text('terms_and_conditions')->nullable(); // 条款和条件

            // 状态管理
            $table->string('status', 20)->default('active'); // active, inactive, draft
            $table->date('effective_date');
            $table->date('expiration_date')->nullable();
            $table->boolean('is_default')->default(false); // 是否为默认方案

            // 统计信息
            $table->integer('enrolled_employees')->default(0); // 已参加员工数
            $table->decimal('total_monthly_cost', 12, 2)->default(0); // 总月度成本

            // 创建者信息
            $table->string('created_by', 100)->nullable();
            $table->string('updated_by', 100)->nullable();

            // 索引
            $table->index(['plan_type', 'status']);
            $table->index(['target_group']);
            $table->index(['department_id']);
            $table->index(['position_id']);
            $table->index(['status']);
            $table->index(['is_default']);
            $table->index(['effective_date', 'expiration_date']);
            $table->index(['code']);

            // 外键约束
            $table->foreign('department_id')->references('id')->on('departments')->onDelete('set null');
            $table->foreign('position_id')->references('id')->on('positions')->onDelete('set null');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('insurance_plans');
    }
};
